居然已經到第七天了!! 我居然還能堅持住,真是太感動了@@
今天要來跟大家說明server跟client的用途以及傳輸種類。
在grpc通訊架構中,server端跟client端有各自不同的傳遞方式,大致可以分成以下四種:
1.client單發對server單發
2.client單發對server stream多發
3.client stream多發對server單發
4.client stream多發對server stream多發
其中大部分的使用情境以第一種(單發對單發),就是一個request對一個response為主,但是我在工作上使用到的是第三種(client stream多發對server單發)。這次的鐵人賽我會將四種傳遞方式都實作過一次。
在這裡補充一些.proto的撰寫規則,
message IronManRequest02{
repeated string name = 1; //getNameList()
}
message IronManResponse02{
string result = 1;
}
如果想要傳遞一個List,需要在型態前面加上repeated,這樣就表示我們要傳遞的是一組List。
那上面提到的傳遞內容單發或者多發的話,我們可以這樣寫
service IronManService{
rpc IronMan(IronManRequest01) returns (IronManResponse01) {}
rpc Client2Servers(IronManRequest01) returns (stream IronManResponse01) {}
rpc Clients2Server(stream IronManRequest01) returns (IronManResponse01) {}
rpc Clients2Servers(stream IronManRequest01) returns (stream IronManResponse01) {}
}
如果要傳送多個request,那就需要在IronManService中,也就是我們定義的method前面加上stream,例如上面所表示的樣子,表示我們如果調用這個method,他會是一個多值傳遞的端口。這樣我們就完成我們的自定義傳送method了。
我們在設計method的時候,都要先在.proto檔中定義好,然後再使用protobuf的套件幫我們自動生成相對應的method即可。